임베딩 & 유사도 검색
1024차원 공간 시각화
다차원 "근접성"의 작동 원리
문자열의 한계
"자동차"를 검색하면 "자동차"라는 단어가 포함된 모든 문서를 찾을 수 있습니다. 하지만 "차량"은 찾지 못합니다. "승용차"도, "내 시빅 브레이크를 교체해야 해"도 마찬가지입니다.
수십 년간 검색은 의미가 아닌 문자열 유사성을 기반으로 결과를 반환하는 방식이었습니다. Google은 엔지니어링으로 점진적 개선을 이어갔습니다. 동의어 사전이 "car"를 "automobile"에 매핑하고, 어간 추출 규칙이 "running"을 "run"에 연결하며, 클릭 패턴 마이닝이 "NYC apartments"를 검색하는 사람들이 "Manhattan rentals"와 같은 결과를 원한다는 것을 밝혀냈습니다. 일치하지 않는 문자열 간의 연결은 거의 수작업으로 매핑해야 했습니다.
임베딩은 의미가 하나의 위치가 될 수 있다는 아이디어로 이 모든 것에 도전했습니다. 텍스트를 좌표로 변환함으로써 유사한 개념이 서로 가까운 곳에 위치하게 됩니다. 이러한 의미 공간의 매핑은 수동이 아니라 학습 데이터에서 창발적으로 나타납니다.
인코딩
간단한 예시부터 시작해 봅시다.
지식 말뭉치의 모든 문서를 두 가지 차원으로 점수를 매긴다고 상상해 보세요: 공룡과 얼마나 관련이 있는지, 그리고 롤러코스터와 얼마나 관련이 있는지. 비슷한 주제의 문서들은 서로 가까운 곳에 위치하게 됩니다.
세 가지 소스로 시작해 봅시다. 각각이 어디에 속한다고 생각하는지 배치해 보세요.
방금 2D 공간에 의미를 매핑한 것입니다. 항목 모음을 내용에 따라 배치한 것이죠.
검색
이제 이 공간을 검색해 봅시다.
같은 그래프에 같은 축을 사용하여 질문을 배치해 보세요. 소스를 매핑할 때와 같은 논리로 질문을 매핑하면, 가장 가까운 항목이 가장 관련성이 높다는 것을 확인할 수 있습니다. 보너스 기능: 슬라이더를 사용하여 검색할 개수를 조절하세요.
이것이 유사도 검색의 핵심입니다. 질문을 배치하고 가장 가까운 k개 항목을 찾습니다. 키워드 매칭이나 동의어 테이블 대신 다차원 근접성을 사용합니다.
두 개의 축은 시작에 불과합니다. 2차원은 두 가지 개념만 담을 수 있습니다. 현실 세계에는 두 가지 이상의 주제가 있으므로 더 많은 차원이 필요합니다.
더 많은 차원
세 번째 축을 추가하면 어떨까요? 생물학을 사용해 봅시다.
어린이 도서는 높은 점수를 받습니다 (종, 서식지, 식단). 백과사전은 어느 정도 다룹니다. 벨로시코스터 페이지는 거의 언급하지 않습니다.
드래그하여 회전하세요.
3차원, 문서당 3개의 좌표. 벨로시코스터 페이지는 이제 (0.50, 0.90) 대신 (0.50, 0.90, 0.05)가 됩니다.
이제 네 번째 축을 상상해 보세요.
저는 3차원에만 존재하기 때문에 개인적으로 상상이 안 됩니다 😔 하지만 사실 그건 중요하지 않습니다! 새로운 차원이 추가될 때마다 각 점에 좌표 하나가 추가되고 거리 공식에 제곱 항 하나가 추가될 뿐입니다. 공간적 표현은 4D에서 한계에 도달하지만, 수학은 계속 작동합니다.
4D를 훨씬 넘어서야 합니다. 실제 임베딩 모델은 약 천 개의 차원을 사용하기 때문입니다. 각 문서와 각 쿼리는 그 천 차원 공간의 한 점이 됩니다. "가장 가까운 문서 찾기"는 2D 그래프에서와 같은 의미입니다. 단지 거리 계산이 더 길어질 뿐입니다.
레이블 없는 축
우리는 공룡, 롤러코스터, 생물학이라는 축을 선택했습니다. 하지만 실제 임베딩 모델에서 1,024개의 주제를 누가 결정할까요?
사실 아무도 결정하지 않습니다. 각 축의 의미는 창발적입니다 (학습 과정에서 자연스럽게 나타남). 이는 블랙박스에 가깝습니다. 847번째 차원을 보고 "이것은 공룡 축이다"라고 말할 수 없습니다. 차원들은 인간이 이름 붙일 수 있는 어떤 것과도 대응하지 않습니다.
이 때문에 공간을 추론하기가 더 어려워집니다. 847번째 차원을 조사하여 두 텍스트가 왜 서로 가까이 위치했는지, 또는 가까울 것으로 예상했던 것이 왜 멀리 떨어졌는지 이해할 수 없습니다.
좌표로서의 텍스트
그렇다면 좌표를 누가 할당할까요? 임베딩 모델이 합니다. 어떤 문자열이든 입력하면 고정 길이의 숫자 목록이 출력됩니다.
출력은 항상 같은 길이입니다 (우리의 경우 VoyageAI의 임베딩 모델을 사용하므로 1,024개 값). 입력이 세 단어든 세 문단이든 마찬가지입니다. 하나의 텍스트 청크는 공간의 한 점에 대응합니다. 임베딩 모델은 텍스트를 읽고 하나의 벡터를 출력합니다.
수학에 밝은 분들은 "벡터"와 "좌표 집합"이 실제로는 동일하지 않다는 것을 알겠지만, 우리의 목적상 벡터를 다른 모든 것에 대한 이 텍스트의 상대적 주소로 생각하는 것이 적절합니다.
유사도
2D 그래프에서 "가장 가까운"은 직선 거리를 의미했습니다. 실제로 유사도 검색은 대신 코사인 유사도를 사용합니다. 코사인 유사도는 두 텍스트가 얼마나 유사한지를 측정하는 또 다른 방법으로, 벡터 사이의 거리가 아니라 벡터가 가리키는 방향을 기반으로 합니다.
직접 시도해 보세요! 두 소스를 선택하여 코사인 유사도를 확인하세요.
벨로시코스터 페이지와 공룡 도서를 비교해 보세요 — 벡터가 매우 다른 방향을 가리킵니다. 백과사전은 모든 것의 중간쯤에 위치하는데, 모든 분야를 다루지만 어느 것도 깊이 다루지 않기 때문에 당연한 결과입니다.
